<?php

namespace Payment\Common\YSEpay\Data\Charge;

use Payment\Common\PayException;
use Payment\Utils\ArrayUtil;

class NatChargeData extends ChargeBaseData{

    /**
     * 构建用于支付的签名相关数据
     *
     * @return void
     */
    protected function buildData(){
        // TODO: Implement buildData() method.
        $this->certainSignData = [
            'channelid'    => $this->channelid,               //渠道编号
            'opt'          => $this->opt ?? "apPreOrder",     //操作类型（“apPreOrder”：支付宝；“upPreOrder”：银联）
            'merid'        => $this->merid,                   //商戶编号
            'termid'       => $this->termid,                  //终端编号
            'tradetrace'   => $this->tradetrace,              //商户订单号（控制在 50 位长度以内，确保在请求接口的系统中全局 唯一；可以包含数字与字母；不能包含其他特殊字符）
            'tradeamt'     => $this->tradeamt,                //交易金额（单位：分）
            'tradetype'    => $this->tradetype ?? "NATIVE",   //支付方式
            'notifyurl'    => $this->notifyurl,               //客户端接收支付成功通知的地址
            'body'         => $this->body ?? "乐店云支付",      //商品或支付单简要描述
        ];
        $signData = array_merge($this->certainSignData, []);
        if(isset($this->openid)){                              //支付宝（买家支付宝用户ID），上送支付宝用户ID时，当前订单仅当前支付宝用户支付
            $signData['openid'] = $this->openid;
        }
        if(isset($this->instalment)){                          //支付宝花呗分期
            $signData['instalment'] = $this->instalment;
        }
        if(isset($this->handingfee)){
            $signData['handingfee'] = $this->handingfee;       //手续费（以分为单位,第一位是 D 或 C，表示借、贷）
        }
        if(isset($this->version)){
            $signData['version'] = $this->version;             //填写的值为 2 时，交易成功后返回优惠信息
        }
        if(isset($this->identity)){
            $signData['identity'] = $this->identity;           //JSON 格式指定付款人信息（格式繁琐，不推荐使用）
        }
        if(isset($this->patnersettleflag)){
            $signData['patnersettleflag'] = $this->patnersettleflag;//资金结算秒到标识（取值：1、2） 1：本次交易正常T1结算，2：本次交易秒到（前提条件：代理需开通白名单、商户需要开通秒到功能）
        }

        // 移除数组中的空值
        $this->retData = ArrayUtil::paraFilter($signData);
    }

    protected function checkDataParam(){
        parent::checkDataParam(); // TODO: Change the autogenerated stub
        if(empty($this->notifyurl)){
            throw new PayException('支付通知地址不能为空');
        }
    }
}
